package com.demo.java.OD501_550.OD527;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【数字游戏(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146494679
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 处理输入
        while (in.hasNext()) {
            int n = in.nextInt(); // 序列长度
            int m = in.nextInt(); // 模数
            int[] nums = new int[n]; // 数字序列
            for (int i = 0; i < n; i++) {
                nums[i] = in.nextInt(); // 读取每个数字
            }

            int sum_value = 0; // 前缀和
            boolean flag = false; // 是否存在符合条件的子序列
            int[] remainders = new int[m]; // 记录每个余数出现的次数
            remainders[0] = 1; // 初始化，表示可以从开始位置得到一个和为0的前缀和
            for (int i = 0; i < n; i++) {
                sum_value += nums[i]; // 更新前缀和
                sum_value %= m; // 计算当前前缀和对m取余的结果
                if (remainders[sum_value] != 0) { // 如果该余数已经出现过，说明存在符合条件的子序列
                    flag = true; // 标记为找到符合条件的子序列
                    break;
                }
                remainders[sum_value]++; // 记录当前余数出现的次数
            }

            System.out.println(flag ? 1 : 0); // 输出结果，存在符合条件的子序列输出1，否则输出0
        }
        return;
    }
}